package cn.kailangtu.myapplication.tools;

import java.text.DecimalFormat;

public class Odometer {
    private double totalDistance = 0.0; // 累计里程（公里）
    private long lastTimestamp = -1;     // 上次记录时间戳
    private double lastSpeed = 0.0;      // 上次记录速度

    private long lastWriteTime = 0;


    public Odometer(){
        totalDistance = APPSPUtils.getInstance().get行驶里程();
        lastWriteTime = System.currentTimeMillis();
    }


    /**
     * 更新当前车速并计算行驶距离
     * @param currentSpeed 当前车速（Km/h）
     * @param currentTimestamp 当前时间戳（毫秒）
     */
    public void updateSpeed(double currentSpeed, long currentTimestamp) {
        if (lastTimestamp == -1) {
            // 首次记录数据，仅初始化不计算距离
            lastTimestamp = currentTimestamp;
            lastSpeed = currentSpeed;
            return;
        }

        // 计算时间差（避免除零和负值）
        long deltaTimeMillis = currentTimestamp - lastTimestamp;
        if (deltaTimeMillis <= 0) return;

        // 单位转换：毫秒 -> 小时
        double deltaHours = deltaTimeMillis / (1000.0 * 3600.0);

        // 计算平均速度（取绝对值累加所有方向行驶距离）
        double avgSpeed = (Math.abs(lastSpeed) + Math.abs(currentSpeed)) / 2.0;

        // 计算小段时间内的行驶距离并累加
        totalDistance += avgSpeed * deltaHours;

        // 更新记录
        lastTimestamp = currentTimestamp;
        lastSpeed = currentSpeed;
        if( (System.currentTimeMillis() - lastWriteTime) > 15000)
        {
            lastWriteTime = System.currentTimeMillis();
            APPSPUtils.getInstance().set行驶里程(new Double(totalDistance).floatValue());
        }
    }

    /**
     * 获取总行驶里程
     * @return 里程（公里）
     */
    public double getTotalDistance() {
        return totalDistance;
    }

    public String getTotalDistanceString()
    {
        return df.format(totalDistance);
    }
    DecimalFormat df = new DecimalFormat("#.##");

    public void reset()
    {
        lastWriteTime = System.currentTimeMillis();
        totalDistance = 0;
        APPSPUtils.getInstance().set行驶里程(0);
    }

}
